# 可迭代对象-->迭代器-->生成器

# 可迭代对象：字符串、列表、字典、元组、集合
# 不可迭代对象：整数、浮点数、布尔值
# li = [1,2,3,4]
# for i in li:  # 转换成一个迭代器不断的去调用里面next()方法
#     print(i)

# num = 10.1
# for i in num:
#     print(i)
# TypeError: 'int' object is not iterable   整数不是可迭代对象

# num = "10"
# isinstance()判断对象是否是已知类型
# 判断这个变量是否是整数？
# print(isinstance(num,int))
from collections.abc import Iterable  # 1.导入这个Iterable
# li = [1,2,3,4,5]
# tu = (1,2,3,4,5)
# num = 10
# 判断数据是否是可迭代对象？
# print(isinstance(li,Iterable)) # 是
# print(isinstance(tu,Iterable))  # 是
# print(isinstance(num,Iterable)) # 不是


# 如果一个对象拥有__iter__方法，那么这个对象就是一个可迭代对象
class A():
    # pass
    def __iter__(self): # 重写__iter__，返回迭代器对象(就是对象本身)
        return self

a = A()
# a这个对象是不是可迭代对象？
print(isinstance(a,Iterable))  # False说明不是一个可迭代对象
for i in a:
    print(i)
# TypeError: 'A' object is not iterable  不是一个可迭代对象
# TypeError: iter() returned non-iterator of type 'NoneType'  返回空的迭代器
# TypeError: iter() returned non-iterator of type 'A' 不是A类的迭代器